1. Technical Field
This invention relates to encryption and decryption techniques. In particular, this invention relates to offloading encryption and decryption processing to a graphics processing unit. The invention also relates to displaying decrypted data from a graphics processing unit.
2. Related Art
Encryption is the process of obscuring data to produce code (“ciphertext”) that is unreadable without special knowledge. Decryption is the process of deciphering the ciphertext and recovering the data. There are a variety of techniques for encrypting and decrypting data including block cipher cryptography, stream cipher cryptography, and public-key cryptography. The National Institute of Standards and Technology (NIST) has adopted a method of block cipher cryptography, called Rijndael encryption, as the Advanced Encryption Standard (AES) for encrypting data.
Rijndael encryption is a process of applying data and an encryption key to an algorithm, called the Rijndael algorithm, for producing ciphertext. The Rijndael encryption process encrypts data in blocks having sixteen data bytes. The data bytes are grouped together in a 4-column-by-4-row block called a state. The data bytes may correspond to alphanumerical characters, symbols, commands, account data, or other type of information. Prior to encryption, an initial encryption key is expanded into ten round-keys. Each round-key has sixteen bytes (one round-key for each byte of data) grouped together in a 4-column-by-4-row round-key block.
The Rijndael algorithm is iterative and consists of 10 rounds. Each round is a sequence of four transformations, known as: AddRoundKey, SubBytes, ShiftRows, and MixColumns. The result of each transformation is referred to as the “state”, and each round operates on the state from the previous round. Each round utilizes its own round-key.
The AddRoundKey transformation combines each byte of the state with a corresponding byte of the round-key by an XOR operation.
The SubBytes transformation replaces each byte of the state with a byte from a look-up table known as the Rijndael S-box.
The ShiftRows transformation operates on the rows of the state. ShiftRows cyclically shifts the bytes in each row by a certain offset so that each column of the output state has a byte from the other three columns of the input state. In ShiftRows, the first row is left unchanged; each byte of the second row is shifted one column to the left; each byte of the third row is shifted two columns to the left; and each byte of the fourth row is shifted three columns to the left. Bytes in the first columns of rows wrap around to the fourth column when a shift is made.
In the MixColumns transformation, each column is treated as a polynomial and multiplied by a matrix in Rijndael's finite field.
Executing a Rijndael encryption program on a processor consumes a significant amount of processor time. Operating on a general purpose system processor, the program may significantly decrease the performance of other system programs such as word processors, spreadsheets, and email clients. A program executing Rijndael decryption similarly consumes a significant amount of processor time and impacts other system programs.